package com.sunwayhorizo.health.platform.security.dao;

import java.util.List;

import com.sunwayhorizo.health.platform.security.persistent.SecurityPermissionRole;
import com.sunwayhorizo.health.platform.security.persistent.SecurityResource;

public interface SecurityResourceDao {
	
	/**
	 * 新增资源级联包含 permissions，resourceDataTypes
	 * @param resource 实体
	 * @return 返回新增的实体
	 */
	SecurityResource newSecurityResource(SecurityResource resource);
	
	/**
	 * 批量删除级联包含permissions，resourceDataTypes
	 * @param list 字符串List
	 */
	void deleteSecurityResource(List<String> list);
	
	/**
	 * 修改资源级联包含permissions，不包含resourceDataTypes
	 * @param resource 实体
	 * @return 返回修改后的实体
	 */
	SecurityResource updateSecurityResource(SecurityResource resource);
	
	/**
	 * 查询资源列表
	 * @return 返回资源实体列表
	 */
	List<SecurityResource> findSecurityResourceList();
	
	/**
     * 查询根节点之外的资源列表
     * @return 返回资源实体列表
     */
	List<SecurityResource> findSecurityResourceListWithOutRootNode();
	
	/**
	 * 查询资源列表以及父资源(一次读取)
	 * @return 返回实体列表
	 */
	List<SecurityResource> findSecurityResourceListWithFatherResource();
	
	/**
	 * 通过角色Id获得已经授权的资源列表
	 * @param roleId 实体Id
	 * @return 返回查询的资源列表
	 */
	List<SecurityPermissionRole> findSecurityResourceListByRoleId(String roleId);
	
	/**
	 * 查询资源详细信息
	 * @param resourceId 实体ID
	 * @return 返回查询到的实体
	 */
	SecurityResource findSecurityResourceDetailById(String resourceId);
	
	/**
	 * 查询资源详细信息
	 * @param roleName 实体名称
	 * @return 返回查询到的实体
	 */
	SecurityResource findSecurityResourceDetailByName(String resourceName);
	
	Long findSecurityResourceListSizeByResourceId(String resourceId);
	Long findSecurityResourceListSizeNotExistsInPermissionRoleByResourceId(String resourceId);
	Long findSecurityResourceListSizeNotExistsInPermissionAccountByResourceId(String resourceId) ;
	Long findSecurityResourceListSizeNotExistsInAccountRolePermissionByResourceId(String resourceId) ;
}